/**
 * Copyright (C), 2001-2031, www.bosssof.com.cn
 * FileName: ProtocolUtil.java
 * Author: YuXingZh
 * Date: 16/5/2024 上午9:47
 * Description:
 * 协议工具类
 * History:
 * Date          Author   Version  Desc
 * 2024-01-01    bosssoft  1.0.0   initialize this file
 */
package org.boss.util;

import cn.hutool.core.text.CharSequenceUtil;
import org.boss.protocol.Protocol;

import static org.boss.cont.CmdCont.*;

/**
 * @className: ProtocolUtil
 * @description: 协议工具类
 * methodxx 使用 ThreadPoolExecutor创建线程进行任务操作
 * 注意事项：
 * 例如：该类需要从容器获取不可以new
 * @author: YuXingZh
 * @date: 16/5/2024上午9:47
 * @since 1.0
 **/
public class ProtocolUtil {

    private static final String VERSION = "1";
    private static final String RELEASE = "1";
    private static final String FLAG = "1";
    private static final String NULL_TYPE = "0";


    /*
     * 命令转化为协议
     * @author YuXingZh
     * @date 2024/05/17 08:31
     *
     * @param msg
     * @return org.boss.protocol.Protocol
     */
    public static Protocol convert(String msg) {
        Protocol protocol = new Protocol();
        String[] parts = msg.split(CharSequenceUtil.SPACE);

        // 检查消息内容是否至少包含一个命令和一个参数
        if (parts.length < 2) {
            //格式异常
        }

        // 命令码
        String command = parts[0];

        // 根据命令码处理不同的逻辑
        if (SEND.equalsIgnoreCase(command)) {
            // 发送文件
            if (ALL.equals(parts[1])) {
                // 发送给所有人
                protocol.setType(ALL);
            } else {
                // 发送给指定ID的客户端
                try {
                    int recipientId = Integer.parseInt(parts[1]);
                    protocol.setType(String.valueOf(recipientId));
                } catch (NumberFormatException e) {
                    //ID错误异常
                }
            }
            // 文件路径
            protocol.setAddress(parts[2]);
            protocol.setCmd(SEND);
        } else if (SHOW.equalsIgnoreCase(command)) {
            // 查看文件内容
            protocol.setAddress(parts[1]);
            protocol.setType(NULL_TYPE);
            protocol.setCmd(SHOW);
        } else {
            // 未知命令异常
        }

        // 设置协议版本号，为固定值"1.0"
        protocol.setVersion(VERSION);
        // 设置消息标志位，为固定值"FLAG"
        protocol.setFlag(FLAG);
        // 设置同步序列号，为一个UUID或者某个固定值
        protocol.setRelease(RELEASE);
        return protocol;
    }
}